import 'package:flutter/painting.dart';
import 'package:ideology/shared/widgets/code_input/highlight/highlight_theme.dart';
import 'package:ideology/shared/widgets/code_input/highlight/syntax_highlighter.dart';
import 'package:ideology/shared/widgets/code_input/highlight/syntax_preset.dart';

/// 一组接近 Dart 语言的关键字集合（"Dart-ish"）。
///
/// - 包含 Dart 常见的保留字、上下文关键字与语言构造符号，
///   例如：`class`, `extends`, `async`, `await`, `yield` 等。
/// - 命名为 "dartishKeywords"，因为集合可能并非完全覆盖 Dart 所有关键字，
///   但足以支持一般的语法高亮需求。
///
/// 匹配语义：
/// - 实际匹配逻辑由 [SyntaxHighlighter] 控制，通常是基于完整单词匹配，
///   避免误把部分词（如变量名中的子串）当成关键字。
const Set<String> dartishKeywords = {
  'abstract','as','assert','async','await','base','break','case','catch','class','const','continue',
  'covariant','default','deferred','do','dynamic','else','enum','export','extends','extension','external',
  'factory','false','final','finally','for','Function','get','hide','if','implements','import','in','interface',
  'is','late','library','mixin','new','null','of','on','operator','part','required','rethrow','return',
  'sealed','set','show','static','super','switch','sync','this','true','try','typedef','var','void','when','while','with','yield',
};

/// 使用给定的 [base] 样式构建一套 **Dart-ish** 语法高亮预设。
///
/// 该方法返回一个 [SyntaxPreset]，包含：
/// - [HighlightTheme]：基于 `HighlightTheme.light(base: base)` 创建的浅色主题；
/// - [SyntaxHighlighter]：配置了 [dartishKeywords] 作为关键字集合；
///
/// ### 使用说明
/// ```dart
/// final preset = makeDartishPreset(
///   const TextStyle(fontFamily: 'Fira Code', fontSize: 14),
/// );
///
/// // 将 preset.theme 用于编辑器控件的整体样式
/// // 将 preset.highlighter 注入到代码输入或高亮控件
/// ```
///
/// ### 扩展建议
/// - 如需支持 **注释高亮**：可以在 [SyntaxHighlighter] 构造器中传入
///   `singleLineCommentPattern` / `multiLineCommentPattern`。
/// - 如需支持 **字符串字面量高亮**：可以传入 `stringPattern` 正则。
/// - 当前仅配置了关键字集合和主题，足以满足基本的 Dart-ish 代码着色需求。
SyntaxPreset makeDartishPreset(TextStyle base) {
  // 1. 基于传入的基础 TextStyle 构造浅色主题
  final theme = HighlightTheme.light(base: base);

  // 2. 创建语法高亮器，传入关键字集合和主题
  final highlighter = SyntaxHighlighter(
    keywords: dartishKeywords,
    theme: theme,
  );

  // 3. 打包为 SyntaxPreset 返回
  return SyntaxPreset(highlighter: highlighter, theme: theme);
}
